package cn.org.xuanguang.kepler.hormos.rdb.plugin;

import cn.org.xuanguang.kepler.hormos.rdb.dml.operator.delete.DeleteOperatorParameter;
import cn.org.xuanguang.kepler.hormos.rdb.dml.operator.insert.InsertOperatorParameter;
import cn.org.xuanguang.kepler.hormos.rdb.dml.operator.select.SelectOperatorParameter;
import cn.org.xuanguang.kepler.hormos.rdb.dml.operator.update.UpdateOperatorParameter;
import cn.org.xuanguang.kepler.hormos.rdb.dsl.sql.SqlRequest;
import cn.org.xuanguang.kepler.hormos.rdb.plugin.mysql.MysqlDmlSQLBuilder;
import cn.org.xuanguang.kepler.hormos.rdb.plugin.postgre.DmlPostgreSQLBuilder;

/**
 * sql组装器
 *
 * @author jarod
 * @since 1.0
 */
public interface DmlSQLBuilder {

    SqlRequest buildDelete(DeleteOperatorParameter parameter);

    SqlRequest buildInsert(InsertOperatorParameter parameter);

    SqlRequest buildUpdate(UpdateOperatorParameter parameter);

    static DmlSQLBuilder of(String dailat) {
        switch (dailat) {
            case "mysql":
                return MysqlDmlSQLBuilder.of();
            case "postgresql":
                return DmlPostgreSQLBuilder.of();
            default:
                return MysqlDmlSQLBuilder.of();
        }
    }


    SqlRequest buildSelect(SelectOperatorParameter parameter);
}
